import os
import glob
import re

def fix_spec_file(spec_file_path):
    """
    修复单个 .spec 文件：
    1. 删除包含 '%patch -P 0 -p1' 的行。
    2. 将 '%autosetup -p1' 替换为 '%autosetup -p0'。
    """
    try:
        with open(spec_file_path, 'r', encoding='utf-8') as file:
            lines = file.readlines()

        new_lines = []
        modified = False
        for line in lines:
            # 规则 1: 删除 '%patch -P 0 -p1'
            # 使用正则表达式确保整行匹配，并处理可能的空白字符
            if re.match(r'^\s*%patch\s+-P\s+0\s+-p1\s*$', line):
                modified = True
                print(f"  从文件 {spec_file_path} 中删除行: {line.strip()}")
                continue  # 跳过此行，不将其添加到 new_lines

            # 规则 2: 将 '%autosetup -p1' 替换为 '%autosetup -p0'
            # 使用 re.sub 进行替换，并处理可能的空白字符
            new_line, num_replacements = re.subn(r'^\s*(%autosetup\s+-p1)\s*$', r'%autosetup -p0', line, flags=re.IGNORECASE)
            if num_replacements > 0:
                modified = True
                print(f"  在文件 {spec_file_path} 中替换行: {line.strip()} -> {new_line.strip()}")
            
            new_lines.append(new_line)

        if modified:
            with open(spec_file_path, 'w', encoding='utf-8') as file:
                file.writelines(new_lines)
            print(f"文件 {spec_file_path} 已成功修复。")
        else:
            print(f"文件 {spec_file_path} 无需修改。")

    except FileNotFoundError:
        print(f"错误: 文件 {spec_file_path} 未找到。")
    except Exception as e:
        print(f"处理文件 {spec_file_path} 时发生错误: {e}")

def process_directories(parent_dir):
    """
    遍历 parent_dir 的第一级子目录，查找并修复 .spec 文件。
    """
    if not os.path.isdir(parent_dir):
        print(f"错误: 目录 {parent_dir} 不存在或不是一个有效的目录。")
        return

    print(f"开始处理根目录: {parent_dir}")
    for item_name in os.listdir(parent_dir):
        item_path = os.path.join(parent_dir, item_name)
        if os.path.isdir(item_path):  # 确保只处理第一级子目录
            print(f"\n正在检查子目录: {item_path}")
            # 在当前子目录中查找 .spec 文件
            # glob.glob 会查找 item_path 下直接匹配 *.spec 的文件
            spec_files = glob.glob(os.path.join(item_path, '*.spec'))
            
            if not spec_files:
                print(f"  在目录 {item_path} 中未找到 .spec 文件。")
                continue
            
            for spec_file in spec_files:
                print(f"  找到 .spec 文件: {spec_file}")
                fix_spec_file(spec_file)
    print("\n所有目录处理完毕。")

if __name__ == "__main__":
    # 提示用户输入要处理的顶层目录
    # target_directory = input("请输入要处理的顶层目录路径 (例如: /root/ws/2025/04/agiros_pkg_build_tools/agiros_src/agiros_partial_openEuler2403lts): ")
    
    target_directory ='/root/ws/2025/04/agiros_pkg_build_tools/agiros_src/agiros_partial_openEuler2403lts'
    if target_directory and os.path.isdir(target_directory):
        process_directories(target_directory)
    elif not target_directory:
        print("未提供目录路径，脚本退出。")
    else:
        print(f"提供的路径 '{target_directory}' 不是一个有效的目录，脚本退出。")